# docker-compose to make it easier to spin up integration tests.
# Services should use NON standard ports to avoid collision with
# any existing services that might be used for development.
# ATTENTION: When adding a service below use a non-standard port
# increment by one from the preceding port.
# For credentials always use `langchain` and `langchain` for the
# username and password. 
version: "3"
name: langchain-tests

services:
  redis:
    image: redis/redis-stack-server:latest
    # We use non standard ports since 
    # these instances are used for testing
    # and users may already have existing
    # redis instances set up locally
    # for other projects
    ports:
      - "6020:6379"
    volumes:
      - ./redis-volume:/data
  graphdb:
    image: graphdb
    ports:
      - "6021:7200"
  mongo:
    image: mongo:latest
    container_name: mongo_container
    ports:
      - "6022:27017"
    environment:
      MONGO_INITDB_ROOT_USERNAME: langchain
      MONGO_INITDB_ROOT_PASSWORD: langchain
  postgres:
    image: postgres:16
    environment:
      POSTGRES_DB: langchain
      POSTGRES_USER: langchain
      POSTGRES_PASSWORD: langchain
    ports:
      - "6023:5432"
    command: |
      postgres -c log_statement=all
    healthcheck:
      test:
        [
          "CMD-SHELL",
          "psql postgresql://langchain:langchain@localhost/langchain --command 'SELECT 1;' || exit 1",
        ]
      interval: 5s
      retries: 60
    volumes:
      - postgres_data:/var/lib/postgresql/data

volumes:
  postgres_data:
